清除浮动
清除浮动分为两种情况:
- 父元素
- 子元素
父元素
父元素设置 after(推荐)
<div class="parent">
<div class="child"></div>
</div>
<style>
.parent:after {
content: '';
display: block; /*或者 table*/
clear: both;
}
.parent {
zoom: 1; /* IE 兼容*/
}
.child {
float: left;
}
</style>
父元素设置 overflow(有 BUG,不推荐)
BFC 也能实现清除浮动的效果,但有副作用.
<div class="parent">
<div class="child"></div>
</div>
<style>
.parent {
overflow: auto; /*或者 hidden*/
zoom: 1;
}
.child {
float: left;
}
</style>
子元素
添加子元素 clear
<div class="parent">
<div class="child"></div>
<div class="clearfix "></div>
</div>
<style>
.child {
float: left;
}
.clearfix {
clear: both;
}
</style>
详细说下清除浮动各属性含义(父级伪元素)
.father::after {
clear: both;
content: '';
display: table;
}
:after伪元素
:在本元素的最后一个子元素之后,而非本元素之后,它们占用的空间仍然属于本元素- :after 和:before 的区别:
- :after 伪元素:在本元素的最后一个子元素之后,而非本元素之后,它们占用的空间仍然属于本元素
- :before 伪元素不适合清除浮动,因为它在源元素内部生成,是在原来的第一个子元素之前,而非本元素之前,仍将发生边距折叠。
- :after 和:before 的区别:
clear属性(清除浮动)
:为了使:after 的左边或者两边不允许出现浮动元素content属性
:利用伪元素必须声明 content 进行占位,否则无效display为块级元素
:内联元素会跟在浮动元素后面,clear 属性也只有在块级元素才会起作用- table 和 block 的区别:
- table:上方和下方的元素 margin 不合并,相当于在上下方元素之间隔了一个 BFC
- block:上方和下方的元素发生 margin 合并
- table 和 block 的区别: